package com.samba.beans;

import java.util.Collection;
import java.util.List;

import com.samba.entites.Utilisateur;
import com.samba.sessions.UtilisateurServiceDAO;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
@Local( {UtilisateurServiceDAO.class} )
public class UtilisateurServiceBean implements UtilisateurServiceDAO {

	@PersistenceContext(unitName = "GestionMicroCredit")
	private EntityManager GestionMicroCreditEM;

//	***************************************
	//*********** CRUD Methods **************
	//***************************************
	//************ User *********************
	//***************************************
	public Utilisateur addUser(Utilisateur user) {
		GestionMicroCreditEM.persist(user);
		return user;
	}
	
	public Utilisateur updateUser(Utilisateur user) {
		GestionMicroCreditEM.merge(user);
		return user;
	}
	
	public Utilisateur deleteUser(Utilisateur user) {
		GestionMicroCreditEM.remove(user);
		return user;
	}

	public void removeUserById(int id) {
		Utilisateur u = GestionMicroCreditEM.find(Utilisateur.class, id);
		if(u!=null)
			GestionMicroCreditEM.remove(u);
	}

	public Collection<Utilisateur> findAllUsers() {
		Query query = GestionMicroCreditEM.createQuery(
				"SELECT user FROM Utilisateur AS user");
		return query.getResultList();
	}

	public Utilisateur findUserById(Integer id) {
		return GestionMicroCreditEM.find(Utilisateur.class, id);
	}
	public Utilisateur findUserByNom(String nom) {
		Query query = GestionMicroCreditEM.createNamedQuery("findUserByNom");
		query.setParameter("nom", nom);
		if (query.getResultList().size()==0){
			return null;
		}else{
			return (Utilisateur)query.getSingleResult();
		}
	}
	
	public List<Utilisateur> findUserWithNomLike(String  NomLike) {
		Query q = GestionMicroCreditEM.createQuery(
				"SELECT user FROM Utilisateur AS user " +
				"WHERE user.nom LIKE ?1"
		);
		q.setParameter(1, NomLike);
		return q.getResultList();
	}

}